import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Service {
    public static void main(String[] args) throws IOException, InterruptedException {
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务端， 在 9999 端口监听， 等待连接..");
//2. 当没有客户端连接 9999 端口时， 程序会 阻塞, 等待连接
// 如果有客户端连接， 则会返回 Socket 对象， 程序继续
        Socket socket = serverSocket.accept();
//3. 通过 socket.getInputStream() 读取客户端写入到数据通道的数据, 显示
        InputStream inputStream = socket.getInputStream();
//4. IO 读取, 使用字符流, 老师使用 InputStreamReader 将 inputStream 转成字符流
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String s = bufferedReader.readLine();
        String[] split = s.split(",");
        if (!split[1].equals("123456")){
            //5. 获取 socket 相关联的输出流
            OutputStream outputStream = socket.getOutputStream();
            // 使用字符输出流的方式回复信息
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
            bufferedWriter.write("refuse");
            bufferedWriter.newLine();// 插入一个换行符， 表示回复内容的结束
            bufferedWriter.flush();//注意需要手动的
            //关闭流
            bufferedWriter.close();
            bufferedReader.close();
            socket.close();
            serverSocket.close();//关闭
        }
        // 获取 socket 相关联的输出流
        OutputStream outputStream = socket.getOutputStream();
        // 使用字符输出流的方式回复信息 accept
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("accept");
        bufferedWriter.newLine();// 插入一个换行符， 表示回复内容的结束
        bufferedWriter.flush();//注意需要手动的
        //4. 获取和 socket 关联的输入流. 读取数据(字符)， 并处理
        String ret = bufferedReader.readLine();
        if (ret.equals("1")){
            System.out.println("文件传输中");
            Thread.sleep(1000);
            System.out.println("finish");//服务器收到服务请求号后，用打印语句来模拟服务的动作，完成后返回“finish”字符串；
            bufferedWriter.write("finish");
            bufferedWriter.newLine();
            bufferedWriter.flush();
        }else if (ret.equals("2")){
            System.out.println("数据库查询完成");
            Thread.sleep(1000);
            System.out.println("finish");
            bufferedWriter.write("finish");
            bufferedWriter.newLine();
            bufferedWriter.flush();
        }else {//异常处理
            bufferedWriter.close();
            bufferedReader.close();
            socket.close();
            serverSocket.close();//关闭
        }
        String ret1 = bufferedReader.readLine();
        if (ret1.equals("byebye")) {
            System.out.println("服务完成，退出...");
        }
        //6.关闭流和 socket
        bufferedWriter.close();
        bufferedReader.close();
        socket.close();
        serverSocket.close();//关闭
    }

}
